package walka;

import postacie.Bohater;
import postacie.Postac;
import postacie.Zombie;
import przedmioty.Bron;
import przedmioty.Mikstura;
import przedmioty.Plecak;
import przedmioty.Zbroja;
import wyjatki.BrakBroni;
import wyjatki.BrakZbroi;

import java.util.Scanner;


public class WalkaInteraktywna implements WalkaInterface {
    Bohater bohater;
    Zombie zombie;

    @Override
    public Postac walcz(Postac a, Postac b)
    {
      return null;

    }

    private void wypiszPowitanie() {
        System.out.println("Witamy w interaktywnej grze RPG");
        System.out.println("-----------------------------------------------");

    }

    public void rozpocznijWalkęInteraktywna() {
        //wypiszPowitanie();
         bohater = stworzBohatera();
         zombie = stworzZombie();

        rozpocznijRundy();
        pokazWynik();
    }

    private void pokazWynik() {
        System.out.println("\nWyniki:");
        System.out.println("Gracz -> " + bohater.getLiczbaHP());
        System.out.println("Zombie -> " + zombie.getLiczbaHP());

        if (bohater.getLiczbaHP() > zombie.getLiczbaHP())
            System.out.println("\nGratulacje " + bohater.getImie() + "! wygrałeś rozgrywkę.");
        else {
            System.out.println("Niestety Zombie " + zombie.getImie() + " wygrał rozgrywkę.");
        }

        System.out.println("------------------------ KONIEC GRY ------------------------");

    }

    private void rozpocznijRundy() {
        for (int i = 0; i < 5 ; i++) {
            System.out.println("Runda nr " + (i+1));
            walczRunde();
        }

    }

    private void walczRunde() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Chcesz zaatakować czy wypić miksturę:");

        int wybor = 0;

        while (wybor < 1 || wybor > 2) {
            System.out.println("1 - Atakuj");
            System.out.println("2 - Wypij miksturę");

            wybor = scanner.nextInt();

            switch (wybor) {
                case 1:
                    try {
                        System.out.println("Gracz " + bohater.getImie() + " atakuje zombi bronią o mocy " + bohater.getAktualnaBron().getSilaObrazen());
                        zombie.obrona(bohater.atak());
                    } catch (BrakZbroi brakZbroi) {
                        System.out.println("Zombi " + bohater.getImie() + "  nie ma zbroi, więc nie może się bronić!");
                    } catch (BrakBroni brakBroni) {
                        System.out.println("Gracz " + bohater.getImie() + " nie ma broni, więc nie może zaatakować!");
                    }
                    break;
                case 2:
                    Mikstura mikstura = new Mikstura("mikstura z dzikiej róży", 10, 5, 300, 15);
                    mikstura.uzyj(bohater);
                    System.out.println("Gracz " + bohater.getImie()+ " wypija miksturę i ma teraz życia: " + bohater.getLiczbaHP());
                    break;
            }
        }

        System.out.println("Teraz czas na atak Zombie");

        try {
            System.out.println("Zombie " + zombie.getImie() + " atakuje gracza bronią o mocy " + (zombie.getAktualnaBron().getSilaObrazen()));
            bohater.obrona(zombie.atak());
        } catch (BrakZbroi brakZbroi) {
            System.out.println("Gracz " + bohater.getImie() + "  nie ma zbroi, więc nie może się bronić!");
        } catch (BrakBroni brakBroni) {
            System.out.println("Zombi " + bohater.getImie() + "  nie ma broni, więc nie może zatakować!");
        }
    }

    private Zombie stworzZombie() {
        System.out.println("Tworzenie Zombie");
        String imieZombie = pobierzImie("zombie");
        Bron wybranaBron = wybierzBron();
        Zbroja wybranaZbroja = wybierzZbroje();

        return new Zombie(imieZombie, 100, 10, wybranaZbroja, wybranaBron);
    }

    private Bohater stworzBohatera() {
        System.out.println("Tworzenie bohatera");
        String imieBohatera = pobierzImie("bohaterowi");
        Bron wybranaBron = wybierzBron();
        Zbroja wybranaZbroja = wybierzZbroje();

        return new Bohater(imieBohatera, 100, wybranaZbroja, wybranaBron, new Plecak());

    }

    private Zbroja wybierzZbroje() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Wybierz jedną z dostępnych zbroi:");

        int wybor = 0;

        while (wybor < 1 || wybor > 3) {
            System.out.println("1 - Ciężka zbroja");
            System.out.println("2 - Srednia zbroja");
            System.out.println("3 - Lekka zbroja");

            wybor = scanner.nextInt();

            switch (wybor) {
                case 1:
                    System.out.println("Wybrana zbroja to ciężka zbroja\n");
                    return new Zbroja("Ciężka zbroja", 24, 15, 800, 8);
                case 2:
                    System.out.println("Wybrana zbroja to srednia zbroja\n");
                    return new Zbroja("Srednia zbroja", 20, 12, 600, 7);
                case 3:
                    System.out.println("Wybrana zbroja to lekka zbroja\n");
                    return new Zbroja("Lekka zbroja", 18, 10, 500, 6);
            }
        }

        return null;
    }

    private Bron wybierzBron() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Wybierz jedną z dostępnych broni:");

        int wybor = 0;

        while (wybor < 1 || wybor > 3) {
            System.out.println("1 - Miecz");
            System.out.println("2 - Maczuga");
            System.out.println("3 - Pałka");

            wybor = scanner.nextInt();

            switch (wybor) {
                case 1:
                    System.out.println("Wybrana broń to Miecz o sile obrażeń 12\n");
                    return new Bron("Miecz", 20, 10, 500, 12);
                case 2:
                    System.out.println("Wybrana broń to Maczuga o sile obrażeń 10\n");
                    return new Bron("Maczuga", 25, 15, 400, 10);
                case 3:
                    System.out.println("Wybrana broń to Miecz o sile obrażeń 8\n");
                    return new Bron("Pałka", 20, 8, 200, 8);
            }
        }

        return null;
    }

    private String pobierzImie(String komuNadacImie) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Podaj imie jakie chcesz nadać swojemu " + komuNadacImie + ": ");
        return scanner.next();
    }
}
